home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0"?>
- <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
- <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
- <!-- $Revision: 1.8.2.4 $ -->
-
- <!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
- <modulesynopsis metafile="mod_cgi.xml.meta">
-
- <name>mod_cgi</name>
- <description>Execution of CGI scripts</description>
- <status>Base</status>
- <sourcefile>mod_cgi.c</sourcefile>
- <identifier>cgi_module</identifier>
-
- <summary>
- <!-- XXX: Should mention Options ExecCGI
- is the link to howto/cgi not sufficient? -nd
- -->
-
- <p>Any file that has the mime type
- <code>application/x-httpd-cgi</code> or handler
- <code>cgi-script</code> (Apache 1.1 or later) will be treated
- as a CGI script, and run by the server, with its output being
- returned to the client. Files acquire this type either by
- having a name containing an extension defined by the
- <directive module="mod_mime">AddType</directive> directive, or by being
- in a <directive module="mod_alias">ScriptAlias</directive>
- directory.</p>
-
- <p>When the server invokes a CGI script, it will add a variable
- called <code>DOCUMENT_ROOT</code> to the environment. This
- variable will contain the value of the
- <directive module="core">DocumentRoot</directive> configuration
- variable.</p>
-
- <p>For an introduction to using CGI scripts with Apache, see
- our tutorial on <a href="../howto/cgi.html">Dynamic Content
- With CGI</a>.</p>
-
- <p>When using a multi-threaded MPM under unix, the module
- <module>mod_cgid</module> should be used in place of
- this module. At the user level, the two modules are essentially
- identical.</p>
- </summary>
-
- <seealso><directive module="core">AcceptPathInfo</directive></seealso>
- <seealso><directive module="core">Options</directive></seealso>
- <seealso><directive module="mod_alias">ScriptAlias</directive></seealso>
- <seealso><directive module="mod_mime">AddHandler</directive></seealso>
- <seealso><a href="../suexec.html">Running CGI programs under different user IDs</a></seealso>
- <seealso><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI Specification</a></seealso>
-
- <section id="env"><title>CGI Environment variables</title>
- <p>The server will set the CGI environment variables as described
- in the <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
- specification</a>, with the following provisions:</p>
-
- <dl>
- <dt>PATH_INFO</dt>
-
- <dd>This will not be available if the <directive module="core"
- >AcceptPathInfo</directive> directive is explicitly set to
- <code>off</code>. The default behavior, if <directive
- >AcceptPathInfo</directive> is not given, is that <module
- >mod_cgi</module> will accept path info (trailing <code>
- /more/path/info</code> following the script filename in the URI),
- while the core server will return a 404 NOT FOUND error for requests
- with additional path info. Omitting the <directive
- >AcceptPathInfo</directive> directive has the same effect as setting
- it <code>On</code> for <module>mod_cgi</module> requests.</dd>
-
- <dt>REMOTE_HOST</dt>
-
- <dd>This will only be set if <directive module="core"
- >HostnameLookups</directive> is set to <code>on</code> (it
- is off by default), and if a reverse DNS lookup of the accessing
- host's address indeed finds a host name.</dd>
-
- <dt>REMOTE_IDENT</dt>
-
- <dd>This will only be set if <directive module="core"
- >IdentityCheck</directive> is set to
- <code>on</code> and the accessing host supports the ident
- protocol. Note that the contents of this variable cannot be
- relied upon because it can easily be faked, and if there is a
- proxy between the client and the server, it is usually
- totally useless.</dd>
-
- <dt>REMOTE_USER</dt>
-
- <dd>This will only be set if the CGI script is subject to
- authentication.</dd>
- </dl>
- </section>
-
- <section id="cgi-debug"><title>CGI Debugging</title>
- <p>Debugging CGI scripts has traditionally been difficult, mainly
- because it has not been possible to study the output (standard
- output and error) for scripts which are failing to run
- properly. These directives, included in Apache 1.2 and later,
- provide more detailed logging of errors when they occur.</p>
-
- <section><title>CGI Logfile Format</title>
- <p>When configured, the CGI error log logs any CGI which does not
- execute properly. Each CGI script which fails to operate causes
- several lines of information to be logged. The first two lines
- are always of the format:</p>
-
- <example>
- %% [<var>time</var>] <var>request-line</var><br />
- %% <var>HTTP-status</var> <var>CGI-script-filename</var>
- </example>
-
- <p>If the error is that CGI script cannot be run, the log file
- will contain an extra two lines:</p>
-
- <example>
- %%error<br />
- <var>error-message</var>
- </example>
-
- <p>Alternatively, if the error is the result of the script
- returning incorrect header information (often due to a bug in
- the script), the following information is logged:</p>
-
- <example>
- %request<br />
- <var>All HTTP request headers received</var><br />
- <var>POST or PUT entity (if any)</var><br />
- %response<br />
- <var>All headers output by the CGI script</var><br />
- %stdout<br />
- <var>CGI standard output</var><br />
- %stderr<br />
- <var>CGI standard error</var><br />
- </example>
-
- <p>(The %stdout and %stderr parts may be missing if the script did
- not output anything on standard output or standard error).</p>
- </section>
- </section>
-
- <directivesynopsis>
- <name>ScriptLog</name>
- <description>Location of the CGI script error logfile</description>
- <syntax>ScriptLog <var>file-path</var></syntax>
- <contextlist><context>server config</context>
- <context>virtual host</context></contextlist>
- <modulelist><module>mod_cgi</module><module>mod_cgid</module>
- </modulelist>
-
- <usage>
- <p>The <directive>ScriptLog</directive> directive sets the CGI
- script error logfile. If no <directive>ScriptLog</directive> is given,
- no error log is created. If given, any CGI errors are logged into the
- filename given as argument. If this is a relative file or path it is
- taken relative to the <directive module="core">ServerRoot</directive>.
- </p>
-
- <example><title>Example</title>
- ScriptLog logs/cgi_log
- </example>
-
- <p>This log will be opened as the user the child processes run
- as, <em>i.e.</em> the user specified in the main <directive
- module="mpm_common">User</directive> directive. This means that
- either the directory the script log is in needs to be writable
- by that user or the file needs to be manually created and set
- to be writable by that user. If you place the script log in
- your main logs directory, do <strong>NOT</strong> change the
- directory permissions to make it writable by the user the child
- processes run as.</p>
-
- <p>Note that script logging is meant to be a debugging feature
- when writing CGI scripts, and is not meant to be activated
- continuously on running servers. It is not optimized for speed
- or efficiency, and may have security problems if used in a
- manner other than that for which it was designed.</p>
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>ScriptLogLength</name>
- <description>Size limit of the CGI script logfile</description>
- <syntax>ScriptLogLength <var>bytes</var></syntax>
- <default>ScriptLogLength 10385760</default>
- <contextlist><context>server config</context>
- <context>virtual host</context></contextlist>
- <modulelist><module>mod_cgi</module><module>mod_cgid</module>
- </modulelist>
-
- <usage>
- <p><directive>ScriptLogLength</directive> can be used to limit the
- size of the CGI script logfile. Since the logfile logs a lot of
- information per CGI error (all request headers, all script output)
- it can grow to be a big file. To prevent problems due to unbounded
- growth, this directive can be used to set an maximum file-size for
- the CGI logfile. If the file exceeds this size, no more
- information will be written to it.</p>
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>ScriptLogBuffer</name>
- <description>Maximum amount of PUT or POST requests that will be recorded
- in the scriptlog</description>
- <syntax>ScriptLogBuffer <var>bytes</var></syntax>
- <default>ScriptLogBuffer 1024</default>
- <contextlist><context>server config</context>
- <context>virtual host</context></contextlist>
- <modulelist><module>mod_cgi</module><module>mod_cgid</module>
- </modulelist>
-
- <usage>
- <p>The size of any PUT or POST entity body that is logged to
- the file is limited, to prevent the log file growing too big
- too quickly if large bodies are being received. By default, up
- to 1024 bytes are logged, but this can be changed with this
- directive.</p>
- </usage>
- </directivesynopsis>
-
- </modulesynopsis>
-